package controllers;

import play.*;
import play.data.validation.Required;
import play.db.DB;
import play.mvc.*;
import utils.exceptions.BDException;

import java.util.*;
import java.sql.Date;

import dao.FachadaDAO;

import models.*;

public class Professor {
	public static void index() {
        render();
    }
	
	public static void professor() {
    	render("Professor/Professor.html");
    }		
	
	public static void actionCadastrar(@Required String nome, @Required String cpf, @Required String rg, @Required String dataNascimento,
			@Required String login, @Required String senha, @Required String cnh, @Required String expCnh) {
		
		if(validation.hasErrors()) {
			render("Professor/cadastroProfessor.html");
		}
		
		Professor professor = new Professor ();
		professor.setNome(params.get("nome"));
		professor.setRg(params.get("rg",Long.class));
		professor.setCpf(params.get("cpf",Long.class));
		professor.setDataNascimento(Date.valueOf(params.get("dataNascimento")));
		professor.setRua(params.get("rua"));
		if (!params.get("numero").isEmpty())
			professor.setNumero(params.get("numero",Integer.class));
		if (!params.get("cep").isEmpty())
			professor.setCep(params.get("cep",Long.class));
		professor.setBairro(params.get("bairro"));
		professor.setCidade(params.get("cidade"));
		professor.setEstado(params.get("estado"));
		professor.setComplemento(params.get("complemento"));
		if (!params.get("telefone1").isEmpty())
			professor.setTelefone1(params.get("telefone1",Long.class));
		if (!params.get("telefone2").isEmpty())
			professor.setTelefone2(params.get("telefone2",Long.class));
		professor.setEmail(params.get("email"));
		professor.setLogin(params.get("login"));
		professor.setSenha(params.get("senha"));
		professor.setCnh(params.get("cnh",Long.class));
		professor.setExpCnh(Date.valueOf(params.get("expCnh")));
		
		try {
			FachadaDAO.getInstance().cadastrarProfessor(professor);
			render("Professor/cadastroProfessorRealizado.html");
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionEditar(@Required String nome, @Required String cpf, @Required String rg, @Required String dataNascimento,
			@Required String login, @Required String senha, @Required String cnh, @Required String expCnh) {
		
		if(validation.hasErrors()) {
			render("Professor/cadastroProfessor.html");
		}
		
		Professor professor;
		try {
			professor = FachadaDAO.getInstance().buscarProfessor(Long.valueOf(cpf));
			
			professor.setNome(params.get("nome"));
			professor.setRg(params.get("rg",Long.class));
			professor.setCpf(params.get("cpf",Long.class));
			professor.setDataNascimento(Date.valueOf(params.get("dataNascimento")));
			professor.setRua(params.get("rua"));
			if (!params.get("numero").isEmpty())
				professor.setNumero(params.get("numero",Integer.class));
			if (!params.get("cep").isEmpty())
				professor.setCep(params.get("cep",Long.class));
			professor.setBairro(params.get("bairro"));
			professor.setCidade(params.get("cidade"));
			professor.setEstado(params.get("estado"));
			professor.setComplemento(params.get("complemento"));
			if (!params.get("telefone1").isEmpty())
				professor.setTelefone1(params.get("telefone1",Long.class));
			if (!params.get("telefone2").isEmpty())
				professor.setTelefone2(params.get("telefone2",Long.class));
			professor.setEmail(params.get("email"));
			professor.setLogin(params.get("login"));
			professor.setSenha(params.get("senha"));
			professor.setCnh(params.get("cnh",Long.class));
			professor.setExpCnh(Date.valueOf(params.get("expCnh")));
			
			FachadaDAO.getInstance().editarProfessor(professor);
			listarProfessor();
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionRemover(String cpf) {
		try {
			FachadaDAO.getInstance().excluirProfessor(Long.valueOf(cpf));
			listarProfessor();
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionBuscarAlterar(String cpf) {
		try {
			Professor professor = FachadaDAO.getInstance().buscarProfessor(Long.valueOf(cpf));
			render("Professor/editarProfessor.html",professor);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionBuscar(String cpf) {
		try {
			Professor professor = FachadaDAO.getInstance().buscarProfessor(Long.valueOf(cpf));
			render("Professor/buscarProfessor.html",professor);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void cadastroProfessor () {
    	render("Professor/cadastroProfessor.html");
    }
	
	public static void voltar () {
    	render("Professor/cadastroProfessor.html");
    }
	
	public static void buscarProfessor () {
    	render("Professor/buscarProfessor.html");
    }
	
	public static void alterarProfessor () {
    	render("Professor/editarProfessor.html");
    }
	
	public static void editarProfessor(long cpf) {
		Professor professor;
		try {
			professor = FachadaDAO.getInstance().buscarProfessor(cpf);
			render("Professor/editarProfessor.html",professor);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }

    public static void listarProfessor () {
    	List<Professor> professores = new ArrayList<Professor>();
		try {
			professores = FachadaDAO.getInstance().listarProfessores();
			render("Professor/listarProfessor.html",professores);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
}
